package com.qf.automation.user.service.impl;

import com.qf.automation.user.dao.NickNameMapper;
import com.qf.automation.user.dao.UserDao;
import com.qf.automation.user.dao.UserMapper;
import com.qf.automation.user.model.User;
import com.qf.automation.user.model.UserExample;
import com.qf.automation.user.service.UserService;
import com.qf.base.utils.PatternUtil;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class UserServiceImpl implements UserService {
    @Resource
    private UserDao userDao;
    @Resource
    private NickNameMapper nickNameMapper;
    @Resource
    private UserMapper userMapper;
    //1、判断signName到底是手机号还是邮箱还是用户名。
    @Override
    public User signIn(String signName, String password) {
//        userDao
        User result=null;
        //1、判断signName到底是手机号还是邮箱还是用户名。

        //登陆名是手机号
        //创建Example对象
        UserExample userExample=new UserExample();
//            创建规范,创建条件对象
        UserExample.Criteria criteria = userExample.createCriteria();

        if (PatternUtil.isMobileNo(signName)){
//            根据规范判断账户名密码是否正确//设置查询条件
            criteria.andTelephoneEqualTo(signName);
        }else if (PatternUtil.isEmailAddr(signName)){
            //登陆名是邮箱
            criteria.andEmailEqualTo(signName);
        }else {
//            登陆名是用户
            criteria.andUsernameEqualTo(signName);
        }
        criteria.andPasswordEqualTo(password);
        List<User> users = userDao.selectByExample(userExample);
        if (users!=null&&users.size()!=0){
            result= users.get(0);
            return result;
        }

        return result;
    }


    //用户注册添加到数据库
    @Override
    public int signUp(User user) {
        //insert语句

        //这个方法无论参数对象的成员是什么，都如实的反应到sql中
        //比如说null。
        //userDao.insert(user);
        //这个方法会结合参数对象的成员是不是null，来确定是否拼接到sql中。
        //insert into tablename(col1,col2) values(value1,value2);
        int result = userDao.insertSelective(user);
        return result;
    }


    //校验用户输入的用户是手机号还是邮箱还是用户名
    @Override
    public boolean checkUserInfo(String userInfo, int type) {
        UserExample userExample=new UserExample();
        UserExample.Criteria criteria = userExample.createCriteria();
        if (type==1){
            criteria.andTelephoneEqualTo(userInfo);
        }else if (type==2){
            criteria.andEmailEqualTo(userInfo);
        }else if (type==3){
            criteria.andUsernameEqualTo(userInfo);
        }else {
            return false;
        }
        List<User> users = userDao.selectByExample(userExample);
        if (users!=null&&users.size()>0){
            return true;
        }

        return false;
    }


    //随机生成昵称
    @Override
    public String randomNickName() {
        return nickNameMapper.selectNickName();
    }


//强行创建一个用户
    @Override
    public User returnUserByPhoneNo(String phoneNo) {
       //根据手机号查询用户
        //如果查到了就返回用户，没查到创建用户
       UserExample example=new UserExample();
        UserExample.Criteria criteria = example.createCriteria();
        criteria.andTelephoneEqualTo(phoneNo);
        List<User> users = userDao.selectByExample(example);
        if (users!=null&&users.size()>0){
            return users.get(0);
        }else {
            //创建用户
            User user=new User();
            user.setTelephone(phoneNo);
            user.setNickname(randomNickName());
            userDao.insertSelective(user);
            List<User> users1 = userDao.selectByExample(example);
            return users1.get(0);
        }

    }

    @Override
    public int saveIcon(Long id, String icon) {
        User user=new User();
        user.setId(id);
        user.setIconLink(icon);
        //根据参数中的主键的值，更新参数中非null的非主键值
        int re=userDao.updateByPrimaryKeySelective(user);
        return re;
    }

    @Override
    public User findUserById(long id) {
        User user = userDao.selectByPrimaryKey(id);
        return user;
    }

    @Override
    public List<User> findUsersByIds(List<Long> id) {
        //自动生成的代码可以做到吗
        return userMapper.findUsersByIds(id);
    }


}
